/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package aritmeticacomputacional;

/**
 *
 * @author João Paulo
 */
public class PontoFixoSinalizado {

//    private String sinal;
    private StringBuilder complementoDois;
    private boolean overflow;

    public PontoFixoSinalizado(StringBuilder numero) {
//        this.sinal = numero.charAt(0) + "";
        this.complementoDois = numero;
        this.overflow = false;
    }

    public void complementoDois() {
        for (int i = 0; i < this.complementoDois.length(); i++) {
            if (this.complementoDois.charAt(i) == '0') {
                this.complementoDois.setCharAt(i, '1');
            } else {
                this.complementoDois.setCharAt(i, '0');
            }
        }
        this.complementoDois = Operacoes.soma(this, new PontoFixoSinalizado(new StringBuilder("0000000000000001"))).getComplementoDois();
    }
    
    public void complementoUm() {
        this.complementoDois = Operacoes.soma(this, new PontoFixoSinalizado(new StringBuilder("1111111111111111"))).getComplementoDois();
        for (int i = 0; i < this.complementoDois.length(); i++) {
            if (this.complementoDois.charAt(i) == '0') {
                this.complementoDois.setCharAt(i, '1');
            } else {
                this.complementoDois.setCharAt(i, '0');
            }
        }
    }

    public StringBuilder getComplementoDois() {
        return complementoDois;
    }

    public void setComplementoDois(StringBuilder complementoDois) {
        this.complementoDois = complementoDois;
    }

    public boolean isOverflow() {
        return overflow;
    }

    public void setOverflow(boolean overflow) {
        this.overflow = overflow;
    }
    
    public int getDecValue() {
        int resultado = 0;
        for (int i = 15; i >= 0; i--) {
            resultado += Integer.parseInt(complementoDois.charAt(i) + "") * Math.pow(2, 15 - i);
        }
        if (complementoDois.charAt(0) == '1') {
            resultado -= 65536;
        }
        return resultado;
    }
}
